package com.linkhub.oms.data.sync.api.wms.domain.dto;

import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * @author Jaycle
 * @version 1.0.0
 * @description 出库单批量创建请求
 * @date 2024/06/14日 12:38
 */
@Data
public class WmsStockOutBatchCreateDTO implements Serializable {
    /**
     * 外部业务代码 消息ID, 用于去重, 因为网络等原因导致重复传输, 请求不会被重复处理
     */
    private String outBizCode;

    /**
     * 订单列表
     */
    private List<Order> orders;

    @Data
    public static class Order {
        /**
         * 出库订单信息
         */
        private DeliveryOrder deliveryOrder;

        /**
         * 订单行信息
         */
        private OrderLines orderLines;

        @Data
        public static class DeliveryOrder {
            /**
             * 出库单号，使用系统订单号，必填
             */
            private String deliveryOrderCode;

            /**
             * 入库单类型，必填，固定为XSDD
             */
            private String orderType;

            /**
             * 仓库代码
             */
            private String warehouseCode;

            /**
             * 货主代码
             */
            private String ownerCode;

            /**
             * 来源平台代码，固定为Shopify
             */
            private String sourcePlatformCode;

            /**
             * 物流公司代码，固定为OTHER
             */
            private String logisticsCode;

            /**
             * 运单号，必填
             */
            private String expressCode;

            /**
             * 买家留言
             */
            private String buyerMessage;

            /**
             * 卖家留言
             */
            private String sellerMessage;

            /**
             * 发货人信息
             */
            private SenderInfo senderInfo;

            /**
             * 收货人信息
             */
            private ReceiverInfo receiverInfo;

            /**
             * 自定义字段1
             */
            private String userDefined1;

            /**
             * 文件信息
             */
            private Files files;

            /**
             * 快递面单
             */
            private String customJson;

            @Data
            public static class SenderInfo {
                /**
                 * 卖家信息的公司名称
                 */
                private String company;

                /**
                 * 卖家信息的姓名
                 */
                private String name;

                /**
                 * 卖家信息的邮编
                 */
                private String zipCode;

                /**
                 * 卖家信息的手机号
                 */
                private String mobile;

                /**
                 * 卖家信息的国家二字码
                 */
                private String countryCode;

                /**
                 * 卖家信息的省份
                 */
                private String province;

                /**
                 * 卖家信息的城市
                 */
                private String city;

                /**
                 * 卖家信息的区域
                 */
                private String area;

                /**
                 * 卖家信息的乡镇
                 */
                private String town;

                /**
                 * 卖家信息的详细地址
                 */
                private String detailAddress;
            }

            @Data
            public static class ReceiverInfo {
                /**
                 * 买家信息的公司名称
                 */
                private String company;

                /**
                 * 买家信息的姓名，必填
                 */
                private String name;

                /**
                 * 买家信息的邮编
                 */
                private String zipCode;

                /**
                 * 买家信息的固定电话
                 */
                private String tel;

                /**
                 * 买家信息的手机号
                 */
                private String mobile;

                /**
                 * 买家信息的国家二字码
                 */
                private String countryCode;

                /**
                 * 买家信息的省份
                 */
                private String province;

                /**
                 * 买家信息的城市
                 */
                private String city;

                /**
                 * 买家信息的区域
                 */
                private String area;

                /**
                 * 买家信息的乡镇
                 */
                private String town;

                /**
                 * 买家信息的详细地址，必填
                 */
                private String detailAddress;

                /**
                 * 买家销售平台ID
                 */
                private String oaid;
            }

            @Data
            public static class Files {
                /**
                 * 文件列表
                 */
                private List<File> file;

                @Data
                public static class File {
                    /**
                     * 文件名称，固定为装箱单.pdf
                     */
                    private String name;

                    /**
                     * 文件URL
                     */
                    private String url;
                }
            }
        }

        @Data
        public static class OrderLines {
            /**
             * 订单行信息列表
             */
            private List<OrderLine> orderLine;

            @Data
            public static class OrderLine {
                /**
                 * OMS商家ID_OMS产品ID
                 */
                private String itemCode;

                /**
                 * WMS商品ID
                 */
                private String itemId;

                /**
                 * 应发数量
                 */
                private String planQty;

                /**
                 * 入库日期
                 */
                private String stockinDate;

                /**
                 * 自定义字段1
                 */
                private String userDefined1;
            }
        }
    }
}
